共计 1657 个字符,预计需要花费 5 分钟才能阅读完成。
引入
参考官方文档 typing 是 3.5 版本的新功能, Python 运行时不强制执行函数和变量类型注解, 但我们写完代码一段时间后再回来看我们的代码, 可能就忘记了自己所写的函数需要传什么参数、返回什么类型的结果, 又得去阅读代码, 这样就大大降低了开发的效率, 而 typing 模块的数显很好的解决了这个问题
一. typing 的作用
- 类型检查,防止运行时出现参数和返回值类型不符合
- 作为开发文档附加说明,方便使用者调用时传入和返回参数类型
- 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒
二. typing 常用的类型
- int, long, float : 整型, 长整形, 浮点型
- bool, str : 布尔型, 字符串类型
- List, Tuple, Dict, Set : 列表, 元组, 字典, 集合
- Iterable, Iterator : 可迭代类型, 迭代器类型
- Generator:生成器类型
三. typing 模块的常用方式
1. 简单的使用方式
def add(name:str,age:int=22)->str:
return f" 名字:{name} 年龄:{age}"
print(add(" 派大星 ")) # 名字: 派大星 年龄:22
2. 类型检查说明
- 在传入参数时通过
[参数名] : [类型]
的形式声明参数的类型 - 返回结果通过
->[结果类型]
的形式声明结果的类型 - 在调用的时候如果参数的类型不正确 pycharm 会有提醒,但不会影响程序的运行
- 对于如 list ,tuple... 等,还可以规定得更加具体一些,如:
-> List[str]
, 规定返回的是列表,并且元素是字符串
3. 比较复杂一点点的使用方式
from typing import List,Tuple,Dict
def add(name:str,age:int,height:float,sex:bool=True)->Tuple[List,Tuple,Dict,bool]:
list1 = [name,age,height,sex]
tuple1 = [1,2,3,4]
dic1 = {"name":name,"age":age}
return list1,tuple1,dic1,sex
print(add(" 派大星 ",22,1.72,True))
# (['派大星', 22, 1.72, True], [1, 2, 3, 4], {'name': '派大星', 'age': 22}, True)
三, 函数注解查看 __annotation__
函数的注解信息都保存在 __annotation__
属性中, 它是一个字典, 包括返回值类型声明
def bar(name:str,age:int)->str:
return f" 名字:{name} 年龄:{age}"
print(bar.__annotations__)
# {'name': <class 'str'>, 'age': <class 'int'>, 'return': <class 'str'>}
四. 类型别名
把类型赋给别名,就可以定义类型别名, 类型别名适用于简化复杂的类型签名
1. 简单类型别名示例
from typing import List
Li = List[str] # 这里 Li 和 List[str] 的意义是相同的
def add(name:str,age:int)->Li:
return [name]
print(add("shawn",22)) # ['shawn'] (列表类型只支持一个元素, 不然报错)
2. 复杂的类型别名示例
from typing import List,Tuple,Dict
People = Tuple[str,int]
Other = Dict[str,int]
Info = Tuple[People,Other]
def add(name:str,info:Info)->None: # 这种写法等同于下面的写法
...
def add2(name:str,info:Tuple[Tuple[str,int],Dict[str,int]])->None:
...
官方文档 : https://docs.python.org/zh-cn/3/library/typing.html#module-typing
正文完